<?php

namespace App\Services;

use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
// 移除 Intervention Image 依赖
// use Intervention\Image\ImageManager;
// use Intervention\Image\Drivers\Gd\Driver;

class WechatAvatarService
{
    /**
     * 下载并保存微信头像到本地
     *
     * @param string $avatarUrl 微信头像URL
     * @param int $userId 用户ID
     * @return string|null 返回本地头像路径，失败返回null
     */
    public function downloadAndSaveWechatAvatar($avatarUrl, $userId)
    {
        try {
            // 验证URL
            if (empty($avatarUrl) || !filter_var($avatarUrl, FILTER_VALIDATE_URL)) {
                Log::warning('无效的微信头像URL: ' . $avatarUrl);
                return null;
            }

            // 下载头像
            $response = Http::timeout(30)->get($avatarUrl);
            
            if (!$response->successful()) {
                Log::error('下载微信头像失败: HTTP ' . $response->status());
                return null;
            }

            $imageData = $response->body();
            
            // 验证是否为有效图片
            if (!$this->isValidImage($imageData)) {
                Log::error('下载的微信头像不是有效图片');
                return null;
            }

            // 生成文件名
            $fileName = 'wechat_avatar_' . $userId . '_' . time() . '.jpg';
            $avatarPath = 'avatars/' . date('Ym') . '/' . $fileName;

            // 直接保存原始图片（不进行压缩处理）
            // 如果需要图片处理，可以取消注释下面的代码
            // $processedImage = $this->processImage($imageData);
            
            // 保存到本地存储
            if (Storage::disk('public')->put($avatarPath, $imageData)) {
                Log::info('微信头像保存成功: ' . $avatarPath);
                return $avatarPath;
            } else {
                Log::error('保存微信头像到本地失败');
                return null;
            }

        } catch (\Exception $e) {
            Log::error('下载微信头像异常: ' . $e->getMessage());
            return null;
        }
    }

    /**
     * 检查用户是否使用默认头像
     *
     * @param \App\Models\User $user
     * @return bool
     */
    public function isDefaultAvatar($user)
    {
        // 如果用户没有头像，认为是默认头像
        if (empty($user->avatar)) {
            return true;
        }

        // 检查是否为系统默认头像路径
        $defaultAvatarPaths = [
            'avatars/default.jpg',
            'avatars/default.png',
            'images/default-avatar.jpg',
            'images/default-avatar.png'
        ];

        return in_array($user->avatar, $defaultAvatarPaths);
    }

    /**
     * 删除用户旧头像
     *
     * @param string $avatarPath
     * @return bool
     */
    public function deleteOldAvatar($avatarPath)
    {
        try {
            if ($avatarPath && Storage::disk('public')->exists($avatarPath)) {
                return Storage::disk('public')->delete($avatarPath);
            }
            return true;
        } catch (\Exception $e) {
            Log::error('删除旧头像失败: ' . $e->getMessage());
            return false;
        }
    }

    /**
     * 验证是否为有效图片
     *
     * @param string $imageData
     * @return bool
     */
    private function isValidImage($imageData)
    {
        // 检查文件头
        $imageInfo = @getimagesizefromstring($imageData);
        return $imageInfo !== false && in_array($imageInfo[2], [IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF]);
    }

    /**
     * 处理图片（已移除GD库依赖，直接返回原始数据）
     * 如果需要图片压缩功能，可以重新启用 Intervention Image
     *
     * @param string $imageData
     * @return string|null
     */
    private function processImage($imageData)
    {
        // 简化版本：直接返回原始图片数据
        // 如果需要压缩和格式转换，需要重新安装 intervention/image 并启用 GD 扩展
        return $imageData;
        
        /* 原始的图片处理代码（需要 GD 扩展）：
        try {
            $manager = new ImageManager(new Driver());
            $image = $manager->read($imageData);
            $image->scaleDown(200, 200);
            return $image->toJpeg(85)->toString();
        } catch (\Exception $e) {
            Log::error('处理图片失败: ' . $e->getMessage());
            return null;
        }
        */
    }

    /**
     * 判断是否应该使用微信昵称
     *
     * @param \App\Models\User $user
     * @param string $wechatNickname
     * @return bool
     */
    public function shouldUseWechatNickname($user, $wechatNickname)
    {
        // 如果用户的nickname和name一致，说明可能是默认设置，可以使用微信昵称
        return $user->nickname === $user->name && !empty($wechatNickname);
    }
}